From 91bad3932cf776fa1a11f8bb69f511419726302f Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 18 Aug 2005 17:46:26 +0000 Subject: [PATCH] Fix direct_remap_area_pages() to handle pagetables above 4GB. Signed-off-by: Keir Fraser --- .../arch/xen/i386/mm/ioremap.c | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c b/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c index b39f110274..1af61e6ed1 100644 --- a/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c +++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c @@ -300,17 +300,17 @@ void __init bt_iounmap(void *addr, unsigned long size) static int direct_remap_area_pte_fn(pte_t *pte, - struct page *pte_page, - unsigned long address, - void *data) + struct page *pte_page, + unsigned long address, + void *data) { - mmu_update_t **v = (mmu_update_t **)data; + mmu_update_t **v = (mmu_update_t **)data; - (*v)->ptr = (pfn_to_mfn(page_to_pfn(pte_page)) << PAGE_SHIFT) - | ((unsigned long)pte & ~PAGE_MASK); - (*v)++; + (*v)->ptr = ((physaddr_t)pfn_to_mfn(page_to_pfn(pte_page)) << + PAGE_SHIFT) | ((unsigned long)pte & ~PAGE_MASK); + (*v)++; - return 0; + return 0; } int direct_remap_area_pages(struct mm_struct *mm, @@ -397,6 +397,16 @@ int touch_pte_range(struct mm_struct *mm, } return generic_page_range(mm, address, size, f, NULL); -} +} EXPORT_SYMBOL(touch_pte_range); + +/* + * Local variables: + * c-file-style: "linux" + * indent-tabs-mode: t + * c-indent-level: 8 + * c-basic-offset: 8 + * tab-width: 8 + * End: + */ -- 2.30.2